﻿package org.rkuk.kasutil.timeline.conditions 
{
	import org.rkuk.kasutil.timeline.ITicker;
	import org.rkuk.kasutil.timeline.ITickInfo;
	import org.rkuk.kasutil.timeline.Timeline;
	/**
	 * 指定刷新频率条件，实现每隔指定的时间刷新一次.
	 * 这里的时间可以是帧，也可以是毫秒，根据Timeline的所使用的Clock的时间单位来确定
	 * @author rkuk
	 */
	public class UpdateFrequency implements ITickerUpdateCondition
	{
		//记录默认的刷新频率
		private static var _defaultFrequency:int = 1;
		
		//记录设定的刷新频率
		private var _frequency:int;
		
		//记录经过的时间
		private var _timePast:Number;
		
		/**
		 * 构造函数
		 * @param	frequency	刷新频率，必须大于0。
		 */
		public function UpdateFrequency(frequency:int=-1)
		{
			if (frequency > 0)
				_frequency = frequency;
			else
				_frequency = _defaultFrequency;
				
			_timePast = NaN;
		}
		
		/* INTERFACE org.rkuk.kasutil.timeline.conditions.ITickerUpdateCondition */
		
		/**
		 * 实现按指定的时间间隔返回true，其它时候返回false，达到间隔一定时间刷新的目的。
		 * @param	timeline	发出刷新信号的Timeline对象
		 * @param	ticker		可能将要被刷新的ITicker对象
		 * @param	tickInfo	Timeline发出刷新信号时的时间信息
		 * @return	true表示ITicker需要被刷新，false表示ITicker不需要被刷新
		 */
		public function isNeedUpdate(timeline:Timeline,ticker:ITicker, tickInfo:ITickInfo):Boolean
		{
			if (isNaN(_timePast))
			{
				_timePast = tickInfo.currentTime;
				return true;
			}
				
			//timeline.currentTimeStep == 0表示立即刷新引起的此次刷新
			if (tickInfo.currentTime-_timePast >= _frequency || timeline.currentTimeStep == 0)
			{
				_timePast = tickInfo.currentTime;
				return true;
			}
			
			return false;
		}
		
		/**
		 * 获取和设置默认的刷新频率，当指定的刷新频率无效时，使用此刷新频率。
		 */
		public static function set defaultFrequency(frequency:int):void
		{
			if (frequency > 0)
				_defaultFrequency = frequency;
		}
		
		public static function get defaultFrequency():int
		{
			return _defaultFrequency;
		}
	}

}